參考:https://docs.docker.com/engine/reference/builder/#run---network
我們很多網路的設定都是在docker run時附加上去的,其實在image打包時就可以設定好,另外一個地方就是docker compose yaml。
這邊使用官方的範例改寫的方式,來練習Dockerfile帶入network的寫法
FROM ubuntu
RUN apt-get update \
&& apt-get upgrade -y \
&& apt-get install -y inetutils-ping curl dnsutils net-tools traceroute --no-install-recommends \
&& rm -rf /var/lib/apt/lists/*
RUN --network=intra
CMD ["sh"]
這是前幾個範例有提到tedyang/ubuntu:1120912的Dockerfile,只是增加了--network=intra,我們看會有什麼結果
docker build -t tedyang/ubuntu:test1 .
為何在Dockerfile指定network會有錯誤呢,因為Dockerfile的network只能包none跟host。
就是沒有網路或是複製主機環境的網路。
我們重新撰寫:
FROM ubuntu
RUN apt-get update \
&& apt-get upgrade -y \
&& apt-get install -y inetutils-ping curl dnsutils net-tools traceroute --no-install-recommends \
&& rm -rf /var/lib/apt/lists/*
RUN --network=none
CMD ["sh"]
這次就成功了。
這邊看到一個奇怪的現象,已經在包image宣告沒有網卡了,但為什麼還是有?這邊理解是在docker run時,network預設會上bridge,所以直接覆蓋了image的設定。
所以還是比較建議從docker compose yaml撰寫network的設定。